﻿#define _CRT_SECURE_NO_WARNINGS


//数组 5G
//#include<stdio.h>
//int main()
//{
//	int s1, s2, s3;
//	int num = 0;
//	int arr[100] = { 0 };
//	scanf("%d %d %d", &s1, &s2, &s3);
//	int m = 0;
//	for (int i = 1; i <= s1; i++)
//	{
//		for (int j = 1; j <= s2; j++)
//		{
//			for (int k = 1; k <= s3; k++)
//			{
//				arr[m] = i + j + k;
//				m++;
//			}
//		}
//	}
//	int max = 1;
//	for (int i = 1; i < m; i++)
//	{
//		if (arr[0] == arr[i])
//			max++;
//	}
//	for (int i = 0; i < m; i++)
//	{
//		int count = 0;
//
//		for (int j = 0; j < m; j++)
//		{
//
//			if (arr[i] == arr[j])
//				count++;
//		}
//		if (count > max)
//		{
//			max = count;
//			num = arr[i];
//		}
//	}
//	printf("%d", num);
//	return 0;
//}

//压缩技术 续集
//#include<stdio.h>
//int main()
//{
//	//先输入第一行
//	char arr[20][20] = { 0 };
//	int n = 0;
//	while (1)
//	{
//		scanf("%c", &arr[0][n]);
//		if (arr[0][n] == '\n')
//			break;
//		n++;
//	}
//	//n行n列
//	//输入下面的行
//	for (int i = 1; i < n; i++)
//	{
//		for (int j = 0; j < n; j++)
//		{
//			scanf(" %c", &arr[i][j]);
//		}
//	}
//	printf("%d ", n);
//	int count = 0;
//	if (arr[0][0] == 49)
//	{
//		printf("%d ", 0);
//	}
//	for (int i = 0; i < n; i++)
//	{
//		for (int j = 0; j < n; j++)
//		{
//
//			
//			if (arr[i][j] == 48)
//			{
//				count++;
//				if (j + 1 < n && (arr[i][j + 1] != 48) || j == (n - 1) && (arr[i + 1][0] != 48) || i + 1 == n && j + 1 == n)
//				{
//					printf("%d ", count);
//					count = 0;
//				}
//
//			}
//			if (arr[i][j] == 49)
//			{
//				count++;
//				if (j + 1 < n && (arr[i][j + 1] != 49) || j == (n - 1) && (arr[i + 1][0] != 49) || j + 1 == n && i + 1 == n)
//				{
//					printf("%d ", count);
//					count = 0;
//				}
//
//			}
//		}
//	}
//	return 0;
//}
//

//数组插火把
//#include<stdio.h>
//int main()
//{
//	int n = 0;
//	int m = 0;
//	int k = 0;
//	int a = 0;
//	int b = 0;
//	//创建一个二维数组 定义没有光的地方是0 把有光的地方赋值为1
//
//	int arr[100][100] = { 0 };
//
//	//n*n的方阵 m个火把 k个萤石
//	scanf("%d %d %d", &n, &m, &k);
//	int num = 0;
//	for (int i = 0; i < n; i++)
//	{
//		for (int j = 0; j < n; j++)
//		{
//			arr[i][j] = 0;
//		}
//	}
//	for (int i = 0; i < m ; i++)
//	{
//		scanf("%d %d", &a,&b);//火把的位置
//		arr[a-1][b-1] = 1;
//		arr[a - 2][b - 2] = 1;
//		arr[a - 2][b ] = 1;
//		arr[a - 2][b-1] = 1;
//		arr[a ][b - 2] = 1;
//		arr[a ][b ] = 1;
//		arr[a ][b-1] = 1;
//		arr[a + 1][b-1] = 1;
//		arr[a - 3][b-1] = 1;
//		arr[a-1][b ] = 1;
//		arr[a-1][b + 1] = 1;
//		arr[a-1][b - 2] = 1;
//		arr[a-1][b - 3] = 1;
//		
//	}
//	for (int i =0;i<k; i++)
//	{
//		scanf("%d %d", &a, &b);
//		arr[a-1][b-1] = 1;
//		arr[a-1][b-2] = 1;
//		arr[a-1][b-3] = 1;
//		arr[a-1][b] = 1;
//		arr[a-1][b+1] = 1;
//		arr[a-2][b-1] = 1;
//		arr[a-2][b-2] = 1;
//		arr[a-2][b-3] = 1;
//		arr[a-2][b] = 1;
//		arr[a-2][b+1] = 1;
//		arr[a-3][b-1] = 1;
//		arr[a-3][b-2] = 1;
//		arr[a-3][b-3] = 1;
//		arr[a-3][b] = 1;
//		arr[a-3][b+1] = 1;
//		arr[a][b-1] = 1;
//		arr[a][b-2] = 1;
//		arr[a][b-3] = 1;
//		arr[a][b] = 1;
//		arr[a][b+1] = 1;
//		arr[a+1][b-1] = 1;
//		arr[a+1][b+1] = 1;
//		arr[a+1][b] = 1;
//		arr[a+1][b-3] = 1;
//		arr[a+1][b-2] = 1;
//
//
//	}
//	int count = 0;
//	for (int i = 0; i < n; i++)
//	{
//		for (int j = 0; j < n; j++)
//		{
//			if (arr[i][j] == 0)
//				count++;
//		}
//	}
//	printf("%d", count);
//	return 0;
//}

//#include<stdio.h>
//int main()
//{
//	int w = 0;
//	int x = 0;
//	int h = 0;
//	int x1 = 0;
//	int y1 = 0;
//	int z1 = 0;
//	int x2 = 0;
//	int y2 = 0;
//	int z2 = 0;
//	int arr[20][20][20] = { 0 };
//	scanf("%d %d %d", &w, &x, &h);
//	for (int i = 0; i < w; i++)
//	{
//		for (int j = 0; i < x; j++)
//		{
//			for (int k = 0; k < h; k++)
//			{
//				arr[i][j][k] = 0;
//			}
//		}
//	}
//	int q = 0;
//	scanf("%d", &q);
//	for (int m = 0; m < q; i++)
//	{
//		scanf("%d %d %d %d %d %d", &x1, &y1, &z1, &x2, &y2, &z2);
//		for (int i = x1; i <= x2; i++)
//		{
//			for (int j = y1; j <= y2; j++)
//			{
//				for (int k = z1; k <= z2; k++)
//				{
//					
//				}
//			}
//		}
//	}
//
//	return 0;
//}



//数组 工艺品
//#include<stdio.h>
//int main()
//{
//	int w = 0;
//	int x = 0;
//	int h = 0;
//	int x1 = 0;
//	int y1 = 0;
//	int z1 = 0;
//	int x2 = 0;
//	int y2 = 0;
//	int z2 = 0;
//	int arr[25][25][25] = { 0 };
//	scanf("%d %d %d", &w, &x, &h);
//	int q = 0;
//	scanf("%d", &q);
//	for (int m = 0; m < q; m++)
//	{
//		scanf("%d %d %d %d %d %d", &x1, &y1, &z1, &x2, &y2, &z2);
//		for (int i = x1; i <= x2; i++)
//		{
//			for (int j = y1; j <= y2; j++)
//			{
//				for (int k = z1; k <= z2; k++)
//				{
//					arr[i][j][k] = 1;
//				}
//			}
//		}
//	}
//	int sum = w * x * h;
//	int sum_ = 0;
//	for (int i = 1; i <= w; i++)
//	{
//		for (int j = 1; j <= x; j++)
//		{
//			for (int k = 1; k <= h; k++)
//			{
//				if (arr[i][j][k] == 1)
//				{
//					sum--;
//				}
//			
//			}
//		}
//	}
//    printf("%d", sum);
//	return 0;
//}

//回文质数
#include<stdio.h>
#include<math.h>
int main()
{
	int a, b;
	int k = 0;
	scanf("%d %d", &a, &b);
	//先求质数
	int zhishu[100000] = { 0 };
	for (int i = a; i <= b; i++)
	{
		int num = i;
		int len = 0;
		do
		{
			num /= 10;
			len++;
		} while (num != 0);
		int count = 0;
		if (len == 2 || len % 2 == 1)
		{
			for (int j = 2; j <= sqrt(i); j++)
			{
				if (i % j == 0)
					count++;
			}
			if (count == 0)
			{
				zhishu[k] = i;
				k++;

			}
		}

	}
	//一共有k个质数存在zhishu里面
	//接下来判断是否为回文数
	for (int i = 0; i < k; i++)//一个数一个数判断 判断他倒置数和它本身一不一样
	{

		if (zhishu[i] / 10 != 0)
		{
			int num = zhishu[i];
			int new_num = 0;
			while (zhishu[i] != 0)
			{
				int m = zhishu[i] % 10;
				new_num += m;
				zhishu[i] /= 10;
				if (zhishu[i] != 0)
					new_num *= 10;

			}
			if (new_num == num)
				printf("%d\n", num);
		}


		else
		{
			printf("%d\n", zhishu[i]);

		}
	}

	return 0;
}
